"""
宿舍内务pro

宿舍内务根据难度分为几个等级，每完成一项任务就可以累计对应等级的分数。等级和分数对应关系如下：
1级：擦桌子、椅子、窗户 - 对应1分
2级：扫地、拖地 - 对应2分
3级：扫厕所 - 对应3分
4级：帮全宿舍打饭 - 对应4分
5级：帮全宿舍签到 - 对应5分

编写一个Python程序，先读取“内务记录.txt”文件，获取所有已填写的信息（字典格式）。
然后让用户输入自己的名字，名字不存在则提示名字错误然后结束程序，如果名字存在，则循环输入自己完成的宿舍内务任务和完成次数。
每次输入结束后，程序会统计并显示用户总共完成每项任务的次数（包括以前的记录）。
如果任务名称不存在则跳出循环，打印用户的总分，并将本次的任务记录更新到 “内务记录.txt” 文件中，程序结束

编程思路提示：
使用with open来操作文件。
读取文件时，将字符串转换回字典。
写入文件前，将字典转换为字符串。
使用循环来接收用户输入的任务和次数。
使用字典来存储和更新任务次数。
输入为空时结束循环，写入文件。
判断key存不存在字典用 if key in dict: 的方式，或者用异常捕获配合 dict[key] 的方式
任务和分数的对应字典用：
    task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}
"""


def main():
    """
    主函数，实现宿舍内务积分的记录、更新和计算功能
    1. 读取内务记录文件
    2. 输入用户名字，检查是否存在
    3. 循环输入完成的任务和次数，更新任务次数和总分
    4. 任务名称不存在时跳出循环
    5. 打印总分并更新文件
    """
    task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}
    try:
        with open("内务记录.txt", "r") as f:
            content = f.read()
            if content:
                records = eval(content)
            else:
                records = {}
    except FileNotFoundError:
        records = {}

    name = input("请输入你的名字：")
    if name not in records:
        print("名字错误")
        return

    user_record = records.get(name, {})
    total_score = 0
    while True:
        task = input("请输入完成的宿舍内务任务（输入为空结束）：")
        if not task:
            break
        try:
            times = int(input("请输入完成的次数："))
        except ValueError:
            print("请输入有效的次数")
            continue
        if task in task_scores:
            if task in user_record:
                user_record[task] += times
            else:
                user_record[task] = times
            total_score += task_scores[task] * times
        else:
            break

    print(f"你的总分是：{total_score}")
    records[name] = user_record
    with open("内务记录.txt", "w") as f:
        f.write(str(records))


if __name__ == "__main__":
    main()
